#ifndef TYPEDEF_CFILE_H
#define TYPEDEF_CFILE_H

#include <stdio.h>

#include "SDL2/SDL.h"

typedef struct cFILE
{
    FILE *file_handle;           // +0
    int32_t mmap_mapping_result; // +4  (1 mmap ok, -1 mmap failed)
    int32_t file_size;           // +8
    void *mmap_addr;             // +12
    void *read_data;             // +16
    int32_t read_offset;         // +20
    int32_t read_size;           // +24
    char *file_path;             // +28
    int32_t unk_32;              // +32
    int32_t unk_36;              // +36
    int32_t unk_40;              // +40
    int32_t unk_44;              // +44
    int32_t unk_48;              // +48
    int32_t unk_52;              // +52
    int32_t unk_56;              // +56
    int32_t unk_60;              // +60
    int32_t unk_64;              // +64
    int32_t unk_68;              // +68
    int32_t unk_72;              // +72
    int32_t unk_76;              // +76
    int32_t unk_80;              // +80
    int32_t unk_84;              // +84
    int32_t unk_88;              // +88
    int32_t unk_92;              // +92
    int8_t is_apkx_mode;         // +96
    int8_t unk_97;               // +97
    int8_t unk_98;               // +98
    int8_t unk_99;               // +99
    uint32_t unk_100;            // +100
    uint32_t unk_104;            // +104
    uint32_t fopen_mode;         // +108
    uint32_t create_mode;        // +112 3(dont create), 4(do create, if not exist)
    uint32_t file_fd;            // +116
    int8_t is_fopen_mode;        // +120
    int8_t is_mmap_mode;         // +121
    int8_t is_mmap_view;         // +122
    int8_t unk_123;              // +123
} cFILE;                         // size = 124

/*
    fopen_mode:  0x40000000  write only
                 0x80000000  read only
                 0xC0000000  read && write
*/

#endif